package com.zhouyihe.weblog.common.domain.mapper;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zhouyihe.weblog.common.domain.dos.UserDO;

import java.time.LocalDateTime;

/**
 * @author 周益和
 * @ClassName UserMapper
 * @qq 1552951165
 * @date 2024/5/27
 */
public interface UserMapper extends BaseMapper<UserDO> {
    /**
     * 根据用户名查询用户信息。
     *
     * @param username 要查询的用户名，不能为空。
     * @return 返回匹配的用户对象，如果没有找到，则返回null。
     */
    default UserDO findByUsername(String username) {
        // 创建查询条件，设置用户名为指定值
        LambdaQueryWrapper<UserDO> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(UserDO::getUsername, username);
        // 根据条件查询并返回第一个结果
        return selectOne(wrapper);
    }
    
    /**
     * 根据用户名更新用户密码。
     *
     * @param username 用户名，用于指定要更新密码的用户。
     * @param password 新密码，将更新为该密码。
     * @return 更新的行数，如果更新了行，则返回大于0的值；如果没有更新，则返回0。
     */
    default int updatePasswordByUsername(String username, String password) {
        LambdaUpdateWrapper<UserDO> wrapper = new LambdaUpdateWrapper<>();
        // 设置需要更新的字段：密码和更新时间
        wrapper.set(UserDO::getPassword, password); // 更新密码
        wrapper.set(UserDO::getUpdateTime, LocalDateTime.now()); // 更新更新时间
        
        // 设置更新条件：按用户名匹配
        wrapper.eq(UserDO::getUsername, username);
        
        // 执行更新操作并返回更新行数
        return update(null, wrapper);
    }

}
